/*  _______         ____    __         ___    ___
 * \    _  \       \    /  \  /       \   \  /   /       '   '  '
 *  |  | \  \       |  |    ||         |   \/   |         .      .
 *  |  |  |  |      |  |    ||         ||\  /|  |
 *  |  |  |  |      |  |    ||         || \/ |  |         '  '  '
 *  |  |  |  |      |  |    ||         ||    |  |         .      .
 *  |  |_/  /        \  \__//          ||    |  |
 * /_______/ynamic    \____/niversal  /__\  /____\usic   /|  .  . ibliotheque
 *                                                      /  \
 *                                                     / .  \
 * rawsig.c - Function to retrieve raw signal         / / \  \
 *            data from a DUH provided you know      | <  /   \_
 *            what type of signal it is.             |  \/ /\   /
 *                                                    \_  /  > /
 * By entheh.                                           | \ / /
 *                                                      |  ' /
 *                                                       \__/
 */

#include <stdlib.h>

#include "dumb.h"
#include "internal/dumb.h"

/* You have to specify the type of sigdata, proving you know what to do with
 * the pointer. If you get it wrong, you can expect NULL back.
 */
sigdata_t *duh_get_raw_sigdata(DUH *duh, int sig, long type) {
    int i;
    DUH_SIGNAL *signal;

    if (!duh)
        return NULL;

    if (sig >= 0) {
        if ((unsigned int)sig >= (unsigned int)duh->n_signals)
            return NULL;

        signal = duh->signal[sig];

        if (signal && signal->desc->type == type)
            return signal->sigdata;
    } else {
        for (i = 0; i < duh->n_signals; i++) {
            signal = duh->signal[i];

            if (signal && signal->desc->type == type)
                return signal->sigdata;
        }
    }

    return NULL;
}
